「 Kata Containers 」源码编译
based on 2.4.3
Requirement
这里采用 ubuntu:18.04 容器化编译,各依赖版本参考版本说明
1 | docker run --privileged -dit -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /dev:/dev --name kata-build ubuntu:18.04 |
Dependence
软件包
1
apt-get update && apt-get -y install git wget make curl gcc xz-utils sudo flex bison bc python3 ninja-build pkg-config libglib2.0-dev librbd-dev libseccomp-dev libpixman-1-dev apt-utils libcap-ng-dev cpio libpmem-dev libelf-dev
Golang 1.16.10 - 1.17.3
1
wget https://go.dev/dl/go1.16.10.linux-$TARGET_ARCH.tar.gz && tar -C /usr/local -zxvf go1.16.10.linux-$TARGET_ARCH.tar.gz && cp /usr/local/go/bin/go /usr/bin/go
Rust (1.58.1,仅在手动编译 kata-agent 组件时需要)
1
2
3
4
5
6
7curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
rustup override set 1.58.1
export ARCH=$(uname -m)
if [ "$ARCH" = "ppc64le" -o "$ARCH" = "s390x" ]; then export LIBC=gnu; else export LIBC=musl; fi
[ ${ARCH} == "ppc64le" ] && export ARCH=powerpc64le
rustup target add ${ARCH}-unknown-linux-${LIBC}yq 3.4.1
1
wget https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_$TARGET_ARCH && chmod +x yq_linux_$TARGET_ARCH && mv yq_linux_$TARGET_ARCH $GOPATH/bin/yq && cp $GOPATH/bin/yq /usr/bin/
docker
1
2
3
4
5
6
7curl -sSL https://get.docker.com/ | sh
cat > /etc/docker/daemon.json << EOF
{
"storage-driver": "vfs"
}
EOF
service docker start
Source Code
kata-containers 2.4.3
1
2
3GO111MODULE=off go get -d -u github.com/kata-containers/kata-containers
cd $GOPATH/src/github.com/kata-containers/kata-containers
git checkout 2.4.3tests 2.4.3(仅在编译 UEFI ROM 时需要)
1
2
3GO111MODULE=off go get -d github.com/kata-containers/tests
cd $GOPATH/src/github.com/kata-containers/tests
git checkout 2.4.3qemu(x86 下为 v6.2.0,arm64 下为 v6.1.0,仅在编译 QEMU 时需要)
1
2
3GO111MODULE=off go get -d github.com/qemu/qemu
cd ${GOPATH}/src/github.com/qemu/qemu
git checkout v6.2.0
Kata Containers
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/src/runtime |
编译结果
- /usr/local/bin/containerd-shim-kata-v2
- /usr/local/bin/kata-collect-data.sh
- /usr/local/bin/kata-monitor
- /usr/local/bin/kata-runtime
- /usr/share/defaults/kata-containers/configuration.toml
Image
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/osbuilder |
编译 Kata agent(可选)
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/src/agent && make |
rootfs
创建镜像文件系统
1 | export ROOTFS_DIR=${GOPATH}/src/github.com/kata-containers/kata-containers/tools/osbuilder/rootfs-builder/rootfs |
添加 Kata agent
仅在 Kata agent 定制化后添加
1 | sudo install -o root -g root -m 0550 -t ${ROOTFS_DIR}/usr/bin ../../../src/agent/target/x86_64-unknown-linux-musl/release/kata-agent |
构建镜像
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/osbuilder/image-builder |
安装镜像
1 | commit=$(git log --format=%h -1 HEAD) |
编译结果
- /usr/share/kata-containers/kata-containers-<date>
- /usr/share/kata-containers/kata-containers.img
initrd
创建镜像文件系统
1 | export ROOTFS_DIR="${GOPATH}/src/github.com/kata-containers/kata-containers/tools/osbuilder/rootfs-builder/rootfs" |
添加 Kata agent
仅在 Kata agent 定制化后添加
1 | sudo install -o root -g root -m 0550 -T ../../../src/agent/target/${ARCH}-unknown-linux-${LIBC}/release/kata-agent ${ROOTFS_DIR}/sbin/init |
构建镜像
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/osbuilder/initrd-builder |
安装镜像
1 | commit=$(git log --format=%h -1 HEAD) |
编译结果
- /usr/share/kata-containers/kata-containers-initrd-<date>
- /usr/share/kata-containers/kata-containers-initrd.img
Hypervisor
QEMU
1 | qemu_directory=${GOPATH}/src/github.com/qemu/qemu |
编译结果
- /usr/bin/qemu-system-<arch>
- /usr/libexec/kata-qemu/virtiofsd
- /usr/share/kata-qemu/qemu/*
Kernel
1 | cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kernel |
x86 操作
1 | x86 环境下删除 arm-experimental 中的 patch 文件,避免误 patch |
arm64 操作
1 | 重复 patch 导致流程异常,注释即可 |
编译结果
- /usr/share/kata-containers/config-5.15.26
- /usr/share/kata-containers/vmlinux.container
- /usr/share/kata-containers/vmlinux-5.15.26-90
- /usr/share/kata-containers/vmlinuz.container
- /usr/share/kata-containers/vmlinuz-5.15.26-90
UEFI ROM
UEFI ROM 仅在 arm64 环境下需要,用于设备热插拔
1 | cd $GOPATH/src/github.com/kata-containers/tests |
编译结果
- /usr/share/kata-containers/kata-flash0.img
- /usr/share/kata-containers/kata-flash1.img
「 Kata Containers 」源码编译
http://shenxianghong.github.io/2021/04/22/2021-04-22 Kata Containers 源码编译/